package com.wisenet.wx.api;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

import com.alibaba.fastjson.JSONObject;
import com.wisenet.common.Const;

/**
 * 疯狂猜图服务类
 * @author fzh
 *
 */
public class GuessImage {
	public static final String START_INPUT = "07";
	// 猜图答案文字串
	private static final String PIC_STR = "神鸟凤凰,异形,沉默的羔羊,生活大爆炸,黑鹰坠落,勇敢的心,断臂山,霹雳娇娃,达芬奇密码,七龙珠,摩登原始人,角斗士,绯闻女孩,高达,驯龙高手,冰河世界,盗梦空间,独立日,后天,功夫梦,金刚,功夫熊猫,狮子王,指环王,法拉利,马达加斯加,侏罗纪公园,大白鲨,华纳兄弟,阿童木,老友记,黑夜传说,汽车总动员,绿灯侠,神奇四侠,杀死比尔,Lost,风云,钢铁侠,哈利波特,欲望都市,闪电侠,超人,蓝精灵,南方公园,阿甘正传,惊声尖叫,破产姐妹,三个傻瓜,索尼克,超级大坏蛋,碟中谍,忍者神龟,海贼王,加勒比海盗,宠物小精灵,钢甲铁拳,拯救大兵瑞恩,怪物史莱克,星球大战,天线宝宝,终结者,复仇者联盟,国王的演讲,小美人鱼,天使爱美丽,黑客帝国,音乐之声,泰坦尼克号,特洛伊,飞屋环游记,里约大冒险,剪刀手爱德华,星际迷航,贝克汉姆,郭德纲,赵本山,希特勒,马三立,卡斯特罗,猫王,高晓松,乔丹,罗纳尔多,萨达姆,乔布斯,刘翔,莎士比亚,姚明,李开复,詹姆斯,阿拉法特,林肯,金正恩,毛泽东,杜甫,鲁迅,科比,林书豪,林丹,周杰伦,甘地,梵高,非诚勿扰,岳飞,居里夫人,阿迪达斯,CHANEL,悍马,亚马逊,Google,百度,中国石化,中国石油,派拉蒙,米高梅,优酷,宝马,奥斯卡,Disney,奥利奥,嘉士伯,南孚,劲量,哈根达斯,喜力,路易威登,李维斯,品客,施华洛世奇,柯达,雪碧,百事,老干妈,劳斯莱斯,奔驰,克林顿,奥巴马,小布什,邓小平,孙中山,比尔盖茨,济公,耶稣,诸葛亮,霍金,达芬奇,爱因斯坦,张飞,关羽,搜狐,印象笔记,半条命,英特尔,可口可乐,国际米兰,巴萨罗那,dior,大宝,乐事,屈臣氏,星巴克,黑莓,果粒橙,红牛,乐高,宝洁,舒肤佳,茅台,yahoo,WII,Sony,微软,cisco,波音,空中客车,沃尔玛,支付宝,绿箭,汰渍,凯迪拉克,沃尔沃,canon,海飞丝,汇源,汉莎航空,维珍航空,英国航空,法国航空,迈克杰克逊,新加坡航空,荷兰皇家航空,美联航,南方航空,全日空,湖南卫视,浙江卫视,江苏卫视,凤凰卫视,俄罗斯,爱尔兰,杭州,瑞士军刀,劳力士,阿根廷,克罗地亚,二十八天后,杜蕾斯,小叮当,麦兜,华盛顿,澳大利亚,巴萨罗那,比萨,意大利,日本,拉斯维加斯,伦敦,巴黎,罗马,旧金山,台北,一休,喜羊羊,奥特曼,唐三藏,国家地理,哪吒,擎天柱,孙悟空,葫芦娃,灰太狼,黑猫警长,希腊,大黄蜂,加拿大,切格瓦拉,法海,李小龙,蝙蝠侠,包青天,阿凡提,樱木花道,匹克,好时,红星二锅头,农夫山泉,恰恰香瓜子,青岛啤酒,娃哈哈,雪花啤酒,芝华士,卡西欧,人人网,林肯,芬达,通用电气,路虎,道奇,浪琴,土豆,索尼爱立信,万事达,新东方,火狐,罗技,格莱美,花花公子,JEEP,士力架,麦当劳,赛百味,米老鼠,兔斯基,阿凡达,超级玛丽,火影忍者,魂斗罗,吃豆人,愤怒的小鸟,汉堡王,白素贞,白雪公主,沙特阿拉伯,雅典,悉尼,莫斯科,巴西,健力宝,立顿,万宝路,顺丰快递,沃达丰,佐罗,大力水手,泰格伍兹,史密斯夫妇,贞子,樱桃小丸子,皮卡丘,加菲猫,Nikon,柏林,怪物公司,德国,威尼斯,里约热内卢,香港,福尔摩斯,迪拜,东京,灰姑娘,智利,伊娃,印第安纳琼斯,印度,机器战警,小熊维尼,Pucca,诺基亚,Facebook,李施德林,帮宝适,corona,优衣库,维他命水,东方树叶,UGG,smart,MINI,雷神,米其林,ebay,金刚狼,齐达内,博尔特,马拉多纳,奥尼尔,泰森,大卫科波菲尔,艾弗森,牛顿,贝尔,爱迪生,憨豆先生,汉尼拔,艺妓回忆录,最后的武士,127小时,千与千寻,蜡笔小新,珍珠港,爱丽丝梦游仙境,小羊乔恩,海底总动员,丁丁历险记,Adobe,AMD,LG,SAMSUNG,skype,GRAPHICS,罗宾汉,甘道夫,兔八哥,圣诞老人,神探加吉特,科学怪人,伏地魔,美国队长,奥利弗,泰山,战神金刚,范海辛,唐老鸭,星矢,史迪奇,PUMA,kappa,nike,李宁,阿玛尼,欧米茄,西铁城,匡威,美特斯邦威,鳄鱼,如家,友谊,雅诗兰黛,凡客诚品,美宝莲,任天堂,大众点评网,富士,爱国者,海信,壳牌,移动梦网,天翼,中国联通,飞利浦,阿尔卑斯,德芙,鲜橙多,燕京啤酒,哈尔滨啤酒,吉尼斯,KFC,必胜客,巧乐兹,随变,吉野家,好丽友,依云,味千拉面,IKEA,护舒宝,五粮液,加多宝,雀巢,益达,高露洁,佳洁士,中华,红塔山,百威,国美,联邦快递,心心相印,双汇,佳得乐,金锣,立白,英孚,甲壳虫,捷豹,铃木,UPS,DHL,雪佛兰,gucci,BURBERRY,coach,新闻联播,世界杯,杜比,彩虹糖,卡夫,莱卡,史努比,环球影业,dell,皇马,阿森纳,曼联,国安,刘谦,菲尔普斯,马丁路德金,阿姆斯特朗,斯大林,李娜,丁俊晖,霹雳游侠,黑衣人,阿拉丁,无敌破坏王,勇敢传说,丑女贝蒂,龙猫,天空之城,大鱼,冒牌天神,少年派的奇幻漂流,人鬼情未了";
	// 成语答案文字串
	private static final String PHRS_STR = "锦上添花一帆风顺背井离乡鸟语花香山高水长满载而归东山再起一路顺风身怀六甲积少成多虎头蛇尾顶天立地七上八下羊入虎口鱼贯而入花前月下落叶知秋月下老人话中有话打草惊蛇三心二意颠三倒四火上浇油一目十行只手遮天一刀两断画蛇添足画龙点睛对牛弹琴一石二鸟双管齐下逆水行舟旗开得胜鸡飞蛋打浑水摸鱼漏网之鱼九牛二虎一泻千里偷鸡摸狗水落石出鸡飞狗跳五花八门全心投入捧腹大笑借酒浇愁风和日丽四通八达归心似箭异曲同工一五一十口是心非无与伦比里应外合多此一举天方夜谭石破天惊四大皆空德高望重四脚朝天三言两语扬眉吐气正中下怀大材小用负荆请罪一举两得东张西望人仰马翻车水马龙五光十色鸡犬升天过河拆桥逆来顺受金盆洗手金屋藏娇明争暗斗三五成群闻鸡起舞青梅竹马螳臂当车无中生有草船借箭官官相护病从口入蜻蜓点水事半功倍粗茶淡饭声东击西高枕无忧水滴石穿四平八稳灯红酒绿高高在上甘拜下风前仆后继楚河汉界项庄舞剑焚书坑儒薪火相传三更半夜背道而驰本末倒置不堪入目才高八斗沧海一粟草木皆兵姹紫嫣红崇山峻岭茅塞顿开飞蛾扑火心直口快入木三分马失前蹄三长两短门当户对迫在眉睫将心比心琴棋书画汗流浃背雌雄难辨小鸟依人吃里扒外拨乱反正请君入瓮僧多粥少隔岸观火颠三倒四想入非非貌合神离网开一面大海捞针离弦之箭削足适履似是而非藕断丝连支离破碎铁杵磨针脱口而出血肉模糊泰山压顶弱不禁风缘木求鱼七窍生烟形影不离唇亡齿寒春色满园胆大包天独当一面堆积如山指手画脚遁入空门唉声叹气八面来风半壁江山重蹈覆辙大步流星大跌眼镜呆若木鸡废话连篇凤毛麟角面黄肌瘦妙笔生花九牛一毛浪子回头来历不明劳燕分飞愿者上钩缺衣少食七零八落偷天换日群龙无首画地为牢惊弓之鸟渐入佳境天工作美门庭若市别出心裁度日如年恩重如山孔融让梨落井下石虎口拔牙轰轰烈烈胆大心细狗尾续貂隔靴搔痒一叶障目深不可测气吞山河长吁短叹昂首挺胸弥天大谎穷困潦倒猴子捞月肝肠寸断苦中作乐充耳不闻古往今来明枪暗箭牛头马面剑拔弩张绝处逢生两败俱伤分崩离析厚此薄彼争锋相对倾国倾城居高临下家徒四壁功德圆满覆水难收不堪回首参差不齐紫气东来天崩地裂十室九空棱模两可拍案叫绝势如破竹死不瞑目坐如针毡思如泉涌世代相传石沉大海不卑不亢大显身手坐吃山空满面红光左右为难目瞪口呆思前想后万念俱灰青面獠牙滥竽充数八仙过海开卷有益命悬一线岳母刺字狐假虎威外强中干畏首畏尾当头棒喝火冒三丈新愁旧恨旁敲侧击狭路相逢行尸走肉百里挑一愁眉苦脸嗤之以鼻宽宏大量半截入土指鹿为马披星戴月两厢情愿风卷残云飞黄腾达有眼无珠退避三舍卧薪尝胆善男信女每况日下毛手毛脚束之高阁玉树临风弃笔从戎牛鬼蛇神怒火中烧普天同庆苦口婆心夸父逐日做贼心虚悬崖勒马血口喷人火烧眉毛横冲直撞颠倒黑白白纸黑字环肥燕瘦远走高飞闭门思过自圆其说比翼双飞待字闺中破口大骂排山倒海心头大患五音不全两面三刀一塌糊涂左右开弓俯首称臣点到为止丢三落四平分秋色爱屋及乌鸡毛蒜皮强词夺理天下太平天各一方山盟海誓";
	
	/**
	 * 获取答案详情
	 * @param type
	 * @param num
	 * @return
	 */
	public static JSONObject getAnswerInfo(String type, Integer num) {
		String answer = getAnswer(type, num), picUrl = null;
			
		if (Const.MENU_TYPE_GUESS_IMAGE.equals(type)) {
			picUrl = String.format(Const.GUESS_IMG_URL, "ques" + num);
		} else {
			picUrl = String.format(Const.GUESS_IMG_URL, "question" + num);
		}
		List<String> list = getRandText(answer);
		StringBuilder randtxt = new StringBuilder();
		for (String str : list) {
			randtxt.append(str);
		}
		JSONObject json = new JSONObject();
		json.put("ids", num);
		json.put("picUrl", picUrl);
		json.put("answer", answer);
		json.put("randtxt", randtxt.toString());
		return json;
	}
	
	/**
	 * 获取答案
	 * @param type
	 * @param num
	 * @return
	 */
	public static String getAnswer(String type, int num) {
		int count = 0;
		String answer = null;
			
		if (Const.MENU_TYPE_GUESS_IMAGE.equals(type)) {
			count = PIC_STR.split("[,]").length;
			answer = PIC_STR.split("[,]")[num < count ? num - 1 : 0];
		} else {
			count = PHRS_STR.length() / 4;
			if (num <= count) {
				// 字符串中截取第几个答案
				answer = PHRS_STR.substring((num - 1) * 4, 4 * num);
			} else {
				answer = PHRS_STR.substring(0, 4);
			}
		}
		return answer;
	}
	
	/**
	 * 获取随机字串的答案
	 * @param answer
	 * @return
	 */
	public static List<String> getRandText(String answer) {
		// 设定备选文字个数为18
		int txtCount = 18;
		String tempAnswers = PHRS_STR.replace(answer, "");
		List<String> list = new ArrayList<String>();
		// 先把答案保存好
		for (int j = 0; j < answer.length(); j++) {
			list.add(String.valueOf(answer.charAt(j)));
		}
		for (int i = 0; i < tempAnswers.length(); i++) {
			int rand = new Random().nextInt(tempAnswers.length());
			// 随机取文字
			String str = String.valueOf(tempAnswers.charAt(rand));
			// 随机取文字的个数
			if (!list.contains(str)) {
				list.add(str);
			}
	        if (list.size() == txtCount) {
	        	break;
	        }
		}
		// 打乱顺序
		Collections.shuffle(list);
		return list;
	}
	
	/**
	 * 获取猜图答案
	 * @param inputTxt
	 * @return
	 */
	public static String getAnswer(String inputTxt) {
		String answer = "请回复 猜图+数字 或 成语+数字，如：猜图1";
		if (inputTxt.length() < 3) {
			return answer;
		}
		String type = inputTxt.startsWith("猜图") ? Const.MENU_TYPE_GUESS_IMAGE : Const.MENU_TYPE_GUESS_IDIOM;
		try {
			inputTxt = inputTxt.substring(2, inputTxt.length()).trim();
			Integer num = Integer.parseInt(inputTxt);
			
			if (Const.MENU_TYPE_GUESS_IMAGE.equals(type) && num > Const.GUESS_IMG_COUNT) {
				return "当前猜图总关数为：" + Const.GUESS_IMG_COUNT;
			}
			if (Const.MENU_TYPE_GUESS_IDIOM.equals(type) && num > Const.GUESS_CY_COUNT) {
				return "当前成语总关数为：" + Const.GUESS_CY_COUNT;
			}
			return getAnswer(type, num);
		} catch (Exception e) {
			return answer;
		}
	}
	
}
